package cn.xiaolang.function.delay_queue.custom;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * 启动队列
 */
public class QueueBootstrap {

    private static final Logger LOG = LoggerFactory.getLogger(QueueBootstrap.class);
    private ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(1);

    /**
     * 创建一个环形队列；并开启定时扫描队列
     *
     * @return
     */
    public WheelQueue start() {
        LOG.info("scaner starting...");
        WheelQueue wheelQueue = new WheelQueue();
        // 定义任务
        QueueScanTimer timerTask = new QueueScanTimer(wheelQueue);
        // 设置任务的执行，1秒后开始，每1秒执行一次
        newScheduledThreadPool.scheduleWithFixedDelay(timerTask, 1, 1, TimeUnit.SECONDS);
        LOG.info("scaner start up.");

        return wheelQueue;
    }

    /**
     * 停止此队列运行。
     */
    public void shutdown() {
        // 只停止扫描队列。已运行的任务暂不停止。
        if (newScheduledThreadPool != null) {
            newScheduledThreadPool.shutdown();
        }
    }


}